Récupérer le message codé avec Python - Exercice 2

Partie 2 : décodage du message caché

On donne la bibliothèque nécessaire ainsi que les fonctions qui permettent d'extraire le code du message de l'image et de déchiffrer le message :

from PIL import Image

def decode64(codein):
    code64 = {'000000': 'A', '000001': 'B', '000010': 'C', '000011': 'D', 
              '000100': 'E', '000101': 'F', '000110': 'G', '000111': 'H', 
              '001000': 'I', '001001': 'J', '001010': 'K', '001011': 'L', 
              '001100': 'M', '001101': 'N', '001110': 'O', '001111': 'P', 
              '010000': 'Q', '010001': 'R', '010010': 'S', '010011': 'T', 
              '010100': 'U', '010101': 'V', '010110': 'W', '010111': 'X', 
              '011000': 'Y', '011001': 'Z', '011010': 'a', '011011': 'b', 
              '011100': 'c', '011101': 'd', '011110': 'e', '011111': 'f', 
              '100000': 'g', '100001': 'h', '100010': 'i', '100011': 'j', 
              '100100': 'k', '100101': 'l', '100110': 'm', '100111': 'n', 
              '101000': 'o', '101001': 'p', '101010': 'q', '101011': 'r', 
              '101100': 's', '101101': 't', '101110': 'u', '101111': 'v', 
              '110000': 'w', '110001': 'x', '110010': 'y', '110011': 'z', 
              '110100': '0', '110101': '1', '110110': '2', '110111': '3', 
              '111000': '4', '111001': '5', '111010': '6', '111011': '7', 
              '111100': '8', '111101': '9', '111110': ' ', '111111': '.'}
    return code64[codein]

def decode(pixel):
    """ Permet de récupérer le code binaire sur 6 bits dans les trois composantes 
    RVB de pixel. Le code se trouve dans les deux bits de poids faible de 
    chaque composante"""
    r = pixel[0] & 0b11
    v = pixel[1] & 0b11
    b = pixel[2] & 0b11
    rvb = r*16 + v*4 + b
    rvbb = bin(rvb)[2:]
    while len(rvbb) < 6:
        rvbb = '0'+rvbb
    return rvbb

Vous allez découvrir le message caché dans l'image. Pour chaque composante RVB de chaque pixel de l'image il faut :

  • récupérer le code binaire 6 bits du message,
  • traduire le code binaire en caractère,
  • ajouter le caractère dans message,
  • interrompre la boucle (break) si le caractère est le point.

Il faut ensuite afficher le message.

2. Compléter le programme suivant :

img_codee = "tigreCode.bmp"
message = ""
listeimage = []
img = Image.open(img_codee)
dataimage = img.getdata()
for pixel in dataimage:

    # A compléter


Source : https://lesmanuelslibres.region-academique-idf.fr
Télécharger le manuel : https://forge.apps.education.fr/drane-ile-de-france/les-manuels-libres/snt-seconde ou directement le fichier ZIP
Sous réserve des droits de propriété intellectuelle de tiers, les contenus de ce site sont proposés dans le cadre du droit Français sous licence CC BY-NC-SA 4.0